객체지향의 이해

객체 및 객체지향의 개념

객체의 개념

  • 객체는 실세계에서 어떤 구체적 의미를 구성하는 하나의 실체 단위로서 특정 사물 및 개념을 말한다. 애플리케이션 관점에서는 필요로 하는 데이터와 그 위에 수행되는 메소드를 가진 작은 소프트웨어 모듈이다.

객체지향의 개념

  • 객체지향이란 실세계의 개체(Entity)속성(Attribute)메소드(Method)가 결합된 형태의 객체로(Object)로 표현하는 개념이다.


객체의 구조 및 특성

객체 = 데이터(Data) + 메소드(Method)

  • 다른 객체와 메시지 전달 방식으로 통신을 한다.
  • 객체지향 세계에서는 객체와 메시지만 존재한다.

객체의 특성

  • 상태(State)를 갖고 있다. (e.g. 자동차 객체는 ‘정지’, ‘이동’ 등의 상태 존재)
  • 행위의 특징을 나타낼 수 있다. (e.g. 자동차 객체는 가속페달을 밟으면 가속)
  • 식별성을 갖고 있다. (e.g. 자동차 번호판으로써 다른 자동차 객체와 식별성을 가짐)
  • 기억장소를 갖고 있다. (e.g. 자동차는 도로 위에 있거나, 차고에 있거나, 항상 어떤 물리적 공간을 차지)


객체지향의 요소

객체(Object)

  • 문제 영역에서 잘 정의된 역할을 갖고 있는 각각에 대해 구별 할 수 있는 단위

클래스(Class)

  • 객체의 타입을 정의하는 템플릿(Template)

메시지(Message)

  • 수신자 객체(Receiver)의 이름과 수신자가 수행할 메소드(Method)의 이름, 메소드 수행시 전달되는 인자(Argument)로 구성

[객체의 구조]


객체지향의 특징

캡슐화(Encapsulation)

  • 필요하지 않은 정보는 캡슐화하여 정보를 은닉하고 오직 메시지만으로 객체와 상호작용을 하게 하는 것이다.
  • 정보에 대한 접근을 오직 메시지만으로 가능토록 한다.
  • 객체의 내부 구조와 실체를 분리하여 내부의 변경이 애플리케이션에 미치는 영향을 최소화 한다.

추상화(Abstraction)

  • 현실 세계의 사실을 객체로 표현하기 보다는 문제 영역의 중요한 측면을 주목하여 상세내역을 없애 나가는 과정이다.
  • 복잡한 프로그램을 간단하게 하고 분석의 초점을 명확히 할 수 있다.

상속성(Inheritance)

  • 클래스 계층을 기초로 클래스 내의 데이터와 메소드를 물려받아 새로운 객체를 생성하는 메커니즘이다.
  • 클래스를 체계화하며 기존의 클래스로부터 확장이 용이하다.
  • 중복코드의 감소 및 소프트웨어의 재사용성이 증대된다.

다형성(Polymorphism)

  • 하나의 객체가 다수의 유형을 가질 수 있도록 지원하는 능력이다.
  • 동일한 이름의 오퍼레이션이라도 오퍼레이션이 일어나는 클래스에 따라 각기 다른 행동을 수행한다.
  • 하나의 함수 이름이나 심볼이 여러가지 목적으로 사용되는 경우를 의미한다.

관계성(Relationship)

  • 객체 간의 상호참조하는 관계를 표현하는 방식이다.
  • is member of: 연관성(Association), 참조 및 이용관계
  • is part of: 집단화(Aggregation), 객체 간의 구조적인 집약 관계
  • is a: 일반화(Generalization), 특수화 (Specialization), 클래스 간의 개념적인 포함 관계
Share